home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 2010 Software/Programs / PCGuia_programas.iso / Software / Utils / VLC Media Player / vlc-1.0.3-win32.exe / sdk / include / vlc / plugins / vlc_meta.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-10-30  |  7.7 KB  |  205 lines

  1. /*****************************************************************************
  2.  * vlc_meta.h: Stream meta-data
  3.  *****************************************************************************
  4.  * Copyright (C) 2004 the VideoLAN team
  5.  * $Id$
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23.  
  24. #ifndef VLC_META_H
  25. #define VLC_META_H 1
  26.  
  27. /**
  28.  * \file
  29.  * This file defines functions and structures for stream meta-data in vlc
  30.  *
  31.  */
  32.  
  33. #include <vlc_arrays.h>
  34.  
  35. typedef enum vlc_meta_type_t
  36. {
  37.     vlc_meta_Title,
  38.     vlc_meta_Artist,
  39.     vlc_meta_Genre,
  40.     vlc_meta_Copyright,
  41.     vlc_meta_Album,
  42.     vlc_meta_TrackNumber,
  43.     vlc_meta_Description,
  44.     vlc_meta_Rating,
  45.     vlc_meta_Date,
  46.     vlc_meta_Setting,
  47.     vlc_meta_URL,
  48.     vlc_meta_Language,
  49.     vlc_meta_NowPlaying,
  50.     vlc_meta_Publisher,
  51.     vlc_meta_EncodedBy,
  52.     vlc_meta_ArtworkURL,
  53.     vlc_meta_TrackID
  54. } vlc_meta_type_t;
  55.  
  56. #define VLC_META_TYPE_COUNT 17
  57.  
  58. /* Returns a localizes string describing the meta */
  59. VLC_EXPORT(const char *, input_MetaTypeToLocalizedString, ( vlc_meta_type_t meta_type ) );
  60.  
  61. #define ITEM_PREPARSED      0x01
  62. #define ITEM_ARTURL_FETCHED 0x02
  63. #define ITEM_ART_FETCHED    0x04
  64. #define ITEM_ART_NOTFOUND   0x08
  65.  
  66. struct vlc_meta_t
  67. {
  68.     char * ppsz_meta[VLC_META_TYPE_COUNT];
  69.  
  70.     vlc_dictionary_t extra_tags;
  71.  
  72.     int i_status;
  73. };
  74.  
  75. /* Setters for meta.
  76.  * Warning: Make sure to use the input_item meta setters (defined in vlc_input.h)
  77.  * instead of those one. */
  78. #define vlc_meta_SetTitle( meta, b )       vlc_meta_Set( meta, vlc_meta_Title, b )
  79. #define vlc_meta_SetArtist( meta, b )      vlc_meta_Set( meta, vlc_meta_Artist, b )
  80. #define vlc_meta_SetGenre( meta, b )       vlc_meta_Set( meta, vlc_meta_Genre, b )
  81. #define vlc_meta_SetCopyright( meta, b )   vlc_meta_Set( meta, vlc_meta_Copyright, b )
  82. #define vlc_meta_SetAlbum( meta, b )       vlc_meta_Set( meta, vlc_meta_Album, b )
  83. #define vlc_meta_SetTrackNum( meta, b )    vlc_meta_Set( meta, vlc_meta_TrackNumber, b )
  84. #define vlc_meta_SetDescription( meta, b ) vlc_meta_Set( meta, vlc_meta_Description, b )
  85. #define vlc_meta_SetRating( meta, b )      vlc_meta_Set( meta, vlc_meta_Rating, b )
  86. #define vlc_meta_SetDate( meta, b )        vlc_meta_Set( meta, vlc_meta_Date, b )
  87. #define vlc_meta_SetSetting( meta, b )     vlc_meta_Set( meta, vlc_meta_Setting, b )
  88. #define vlc_meta_SetURL( meta, b )         vlc_meta_Set( meta, vlc_meta_URL, b )
  89. #define vlc_meta_SetLanguage( meta, b )    vlc_meta_Set( meta, vlc_meta_Language, b )
  90. #define vlc_meta_SetNowPlaying( meta, b )  vlc_meta_Set( meta, vlc_meta_NowPlaying, b )
  91. #define vlc_meta_SetPublisher( meta, b )   vlc_meta_Set( meta, vlc_meta_Publisher, b )
  92. #define vlc_meta_SetEncodedBy( meta, b )   vlc_meta_Set( meta, vlc_meta_EncodedBy, b )
  93. #define vlc_meta_SetArtURL( meta, b )      vlc_meta_Set( meta, vlc_meta_ArtworkURL, b )
  94. #define vlc_meta_SetTrackID( meta, b )     vlc_meta_Set( meta, vlc_meta_TrackID, b )
  95.  
  96. /* Free a dictonary key allocated by strdup() in vlc_meta_AddExtra() */
  97. static inline void vlc_meta_FreeExtraKey( void *p_data, void *p_obj )
  98. {
  99.     VLC_UNUSED( p_obj );
  100.     free( p_data );
  101. }
  102.  
  103. static inline void vlc_meta_Set( vlc_meta_t *p_meta, vlc_meta_type_t meta_type, const char *psz_val )
  104. {
  105.     free( p_meta->ppsz_meta[meta_type] );
  106.     p_meta->ppsz_meta[meta_type] = psz_val ? strdup( psz_val ) : NULL;
  107. }
  108.  
  109. static inline const char *vlc_meta_Get( const vlc_meta_t *p_meta, vlc_meta_type_t meta_type )
  110. {
  111.     return p_meta->ppsz_meta[meta_type];
  112. }
  113.  
  114. static inline vlc_meta_t *vlc_meta_New( void )
  115. {
  116.     vlc_meta_t *m = (vlc_meta_t*)malloc( sizeof(*m) );
  117.     if( !m )
  118.         return NULL;
  119.     memset( m->ppsz_meta, 0, sizeof(m->ppsz_meta) );
  120.     m->i_status = 0;
  121.     vlc_dictionary_init( &m->extra_tags, 0 );
  122.     return m;
  123. }
  124.  
  125. static inline void vlc_meta_Delete( vlc_meta_t *m )
  126. {
  127.     int i;
  128.     for( i = 0; i < VLC_META_TYPE_COUNT ; i++ )
  129.         free( m->ppsz_meta[i] );
  130.     vlc_dictionary_clear( &m->extra_tags, vlc_meta_FreeExtraKey, NULL );
  131.     free( m );
  132. }
  133.  
  134. static inline void vlc_meta_AddExtra( vlc_meta_t *m, const char *psz_name, const char *psz_value )
  135. {
  136.     char *psz_oldvalue = (char *)vlc_dictionary_value_for_key( &m->extra_tags, psz_name );
  137.     if( psz_oldvalue != kVLCDictionaryNotFound )
  138.         vlc_dictionary_remove_value_for_key( &m->extra_tags, psz_name,
  139.                                              vlc_meta_FreeExtraKey, NULL );
  140.     vlc_dictionary_insert( &m->extra_tags, psz_name, strdup(psz_value) );
  141. }
  142.  
  143. static inline void vlc_meta_Merge( vlc_meta_t *dst, const vlc_meta_t *src )
  144. {
  145.     char **ppsz_all_keys;
  146.     int i;
  147.  
  148.     if( !dst || !src )
  149.         return;
  150.  
  151.     for( i = 0; i < VLC_META_TYPE_COUNT; i++ )
  152.     {
  153.         if( src->ppsz_meta[i] )
  154.         {
  155.             free( dst->ppsz_meta[i] );
  156.             dst->ppsz_meta[i] = strdup( src->ppsz_meta[i] );
  157.         }
  158.     }
  159.  
  160.     /* XXX: If speed up are needed, it is possible */
  161.     ppsz_all_keys = vlc_dictionary_all_keys( &src->extra_tags );
  162.     for( i = 0; ppsz_all_keys && ppsz_all_keys[i]; i++ )
  163.     {
  164.         /* Always try to remove the previous value */
  165.         vlc_dictionary_remove_value_for_key( &dst->extra_tags, ppsz_all_keys[i], vlc_meta_FreeExtraKey, NULL );
  166.  
  167.         void *p_value = vlc_dictionary_value_for_key( &src->extra_tags, ppsz_all_keys[i] );
  168.         vlc_dictionary_insert( &dst->extra_tags, ppsz_all_keys[i], strdup( (const char*)p_value ) );
  169.         free( ppsz_all_keys[i] );
  170.     }
  171.     free( ppsz_all_keys );
  172. }
  173.  
  174. #define VLC_META_TITLE              input_MetaTypeToLocalizedString( vlc_meta_Title )
  175. #define VLC_META_ARTIST             input_MetaTypeToLocalizedString( vlc_meta_Artist )
  176. #define VLC_META_GENRE              input_MetaTypeToLocalizedString( vlc_meta_Genre )
  177. #define VLC_META_COPYRIGHT          input_MetaTypeToLocalizedString( vlc_meta_Copyright )
  178. #define VLC_META_ALBUM              input_MetaTypeToLocalizedString( vlc_meta_Album )
  179. #define VLC_META_TRACK_NUMBER       input_MetaTypeToLocalizedString( vlc_meta_TrackNumber )
  180. #define VLC_META_DESCRIPTION        input_MetaTypeToLocalizedString( vlc_meta_Description )
  181. #define VLC_META_RATING             input_MetaTypeToLocalizedString( vlc_meta_Rating )
  182. #define VLC_META_DATE               input_MetaTypeToLocalizedString( vlc_meta_Date )
  183. #define VLC_META_SETTING            input_MetaTypeToLocalizedString( vlc_meta_Setting )
  184. #define VLC_META_URL                input_MetaTypeToLocalizedString( vlc_meta_URL )
  185. #define VLC_META_LANGUAGE           input_MetaTypeToLocalizedString( vlc_meta_Language )
  186. #define VLC_META_NOW_PLAYING        input_MetaTypeToLocalizedString( vlc_meta_NowPlaying )
  187. #define VLC_META_PUBLISHER          input_MetaTypeToLocalizedString( vlc_meta_Publisher )
  188. #define VLC_META_ENCODED_BY         input_MetaTypeToLocalizedString( vlc_meta_EncodedBy )
  189. #define VLC_META_ART_URL            input_MetaTypeToLocalizedString( vlc_meta_ArtworkURL )
  190. #define VLC_META_TRACKID            input_MetaTypeToLocalizedString( vlc_meta_TrackID )
  191.  
  192. enum {
  193.     ALBUM_ART_WHEN_ASKED,
  194.     ALBUM_ART_WHEN_PLAYED,
  195.     ALBUM_ART_ALL
  196. };
  197.  
  198. struct meta_export_t
  199. {
  200.     input_item_t *p_item;
  201.     const char *psz_file;
  202. };
  203.  
  204. #endif
  205.